import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86183
 */
public class Test1 {
    //15.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
    /*
    * 使用flg来表示正负，使用flg=-flg来进行正负号交换*/
    public static void main(String[] args) {
        double sum = 0;
        int flg = 1;
        for (int i = 1; i <= 100; i++) {
            sum += 1.0/i *flg;
            flg = -flg;
        }
        System.out.println(sum);
    }
    //14.KiKi学习了循环，BoBo老师给他出了一系列打印图案的练习，该任务是打印用“*”组成的X形图案。
    /*思路：
    * 1.两个for循环
    * 2.判断 i==j||i+j = n-1*/
    public static void main14(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i==j || (i + j)== n-1 ){
                    System.out.print("*");
                }else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
    //13.给定一个数字，判定一个数字是否是素数
    //素数：又称为质数，只能被1和本身整除的数
    /*思路：
    * 1.for循环，
    * 2.判断在2~n-1之间是否有能试除n的数。如果有n不是素数，否则是素数
    * */
    public static void main13_2(String[] args) {
        //优化:任何一个数字n，都可以写成 n = a*b的形式。那么必然会有一个数字是小于等于根号n的。
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        boolean flag = true;
        for (int i = 2; i <=Math.sqrt(n); i++) {
            if (n % i ==0 ){
                System.out.println(n +"不是素数");
                flag = false;
                break;

            }
        }
        if (flag){
            System.out.println(n+"是素数");
        }
    }
    public static void main13_1(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        boolean flag = true;
        for (int i = 2; i <= n-1 ; i++) {
            if (n % i ==0 ){
                System.out.println(n +"不是素数");
                flag = false;
                break;

            }
        }
        if (flag){
            System.out.println(n+"是素数");
        }
    }
    //12.编写程序数一下 1到 100 的所有整数中出现多少个数字9
    public static void main12(String[] args) {
        int count = 0;
        for (int i = 0; i <= 100; i++) {

            if(i / 10 == 9){
                count++;
            }
            if (i % 10 == 9 ){
                count++;
            }
        }
        System.out.println(count);
    }
    //11.写一个函数返回参数二进制中 1 的个数
    /*思路：
    * 1.将数和比该数-1的数进行&
    * 2.判断  结果为0 ，count++ ，否则将得出的结果和比该数-1的数进行&
    * */
    public static void main11(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int count = 0;
        while ( a != 0){
            a = a & (a-1);
            count++;
        }
        System.out.println(count);
    }
    //10.求出0～999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数，其各位数字的立方和确好等于该数
    //本身，如： 153＝1^3＋5^3＋3^3 ，则153是一个“水仙花数”。)
    /*思路：
    * 1、确定数的位数
    * 2、确定数的每一位是什么
    * 3、判断该数 是否等于 每一位的位数次方的和
    * */
    public static void main10(String[] args) {
        for (int i = 0; i <=999 ; i++) {
            int n = i;
            int count = 0;
            while ( n != 0){
               n = n/ 10;
                count ++;
            }
            int sum = 0;
             n = i;
            while ( n != 0){
                sum += Math.pow(n % 10,count);
                n = n / 10;
            }
            if (i == sum){
                System.out.println(i);
            }
        }
    }
    //9. 求两个正整数的最大公约数
    //‌公约数‌是指能同时整除几个整数的数。
    // 如果一个整数同时是几个整数的约数，则称这个整数为它们的公约数；公约数中最大的称为‌最大公约数。
    /*思路：辗转相除法
    * 1.使用Scanner来输入两个整数
    * 2.用较大的数除以较小的数
    * 3.判断  如果余数不等于0，将上次较小的数作为较大的数，上次的余数作为较小的数，知道余数为0.如果余数等于0，则最大公因数是较小的数
    * */
    public static void main9(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = a%b;
        while (true){
            if( c != 0 ){
                a = b;
                b = c;
                c = a % b;
            }else {
                System.out.println("最大公因数是："+ b);
                break;
            }
        }


    }
    //8.输出乘法口诀表
    /*思路：双循环
    * 1.外侧循环 -- 代表每一行
    * 2.里面的循环 -- 代表每一行中的列数
    * */
    public static void main8(String[] args) {
        for (int i = 1; i <= 9 ; i++) {
            for (int j = 1; j <= i ; j++) {
                System.out.print(j + "x" + i + "=" + i*j +" ");
            }
            System.out.println();
        }
    }
    //7.输出 1000 - 2000 之间所有的闰年
    public static void main7(String[] args) {
        int count = 0;
        for (int i = 1000; i <=2000 ; i++) {
            if ( i % 100 == 0){
                if( i %400 == 0){
                    System.out.println(i);
                    count++;
                }
            }else {
                if ( i % 4==0){
                    System.out.println(i);
                    count++;

                }
            }
        }
        System.out.println(count);
    }
    //6. 找到 100 - 200 中第一个 3 的倍数
    public static void main6(String[] args) {
        for (int i = 100; i <= 200 ; i++) {
            if( i %3 == 0){
                System.out.println(i);
                break;
            }

        }
    }
    //5.计算 1! + 2! + 3! + 4! + 5!
    /*思路：
    * 1、两个for循环嵌套
    * 2、第一个for循环得到每一个数字
    * 3、第二个for计算的是数字i的阶乘
    * 4、最后将每一个数字i阶乘的值相加*/
    public static void main5(String[] args) {
        int sum = 1;
        int ret = 0;
        //外层循环负责求阶乘的和
        for (int i = 1; i <= 5 ; i++) {
            //计算的是数字i的阶乘（里层循环负责完成求阶乘的细节）
            for (int j = 1; j <=i; j++) {
                sum *= j;
            }
            //将每一个数字i阶乘的值相加
            ret += sum;
        }
        System.out.println(ret);
    }
    //4. 计算 5 的阶乘
    public static void main4(String[] args) {
        int sum = 1;
        for (int i = 1; i <= 5 ; i++) {
            sum *= i;
        }
        System.out.println(sum);
    }
    //3.计算 1 - 100 的和
    /*
    *使用while/for语句
    * */
    public static void main3(String[] args) {
       /* int i = 1;
        int sum = 0;
        while( i <=100 ){
            sum += i;
            i++;
        }
        System.out.println(sum);
    */
        int sum = 0;
        for (int i = 1;i <= 100; i++){
            sum += i;
        }
        System.out.println(sum);
    }
    //2.判断一个年份是否为闰年
    /*思路：
    * 1、使用if语句
    * 2、条件：普通年能被4整除但不能被100整除的年份是闰年，世纪年能被400整除的年份是闰年‌
    * */

    public static void main2(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        if(num % 100 == 0 ){
            if(num %400 == 0){
                System.out.println(num + "是世纪闰年");//2000
            }else{
                System.out.println(num +"不是闰年");
            }
        }else{
            if( num % 4 == 0 ){
                System.out.println(num + "是普通闰年");//2004
            }else{
                System.out.println(num +"不是闰年");
            }
        }

    }
    //1.判断一个数字是奇数还是偶数
    /*思路：
    * 1、使用if语句来判断
    * 2、判断条件 i% 2 == 0，为真时偶数，为假是奇数
    * */
    public static void main1(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        if( num % 2 == 0){
            System.out.println(num + "是偶数");
        }else {
            System.out.println(num + "是奇数");
        }
    }
}
